package com.ruoyi.tzai.service;

import java.util.List;
import com.ruoyi.tzai.domain.TaskStep;

/**
 * 任务步骤Service接口
 * 
 * @author tzai
 * @date 2025-11-12
 */
public interface ITaskStepService 
{
    /**
     * 查询任务步骤
     * 
     * @param stepId 任务步骤主键
     * @return 任务步骤
     */
    public TaskStep selectTaskStepByStepId(Long stepId);

    /**
     * 查询任务步骤列表
     * 
     * @param taskStep 任务步骤
     * @return 任务步骤集合
     */
    public List<TaskStep> selectTaskStepList(TaskStep taskStep);

    /**
     * 根据任务ID查询所有步骤
     * 
     * @param taskId 任务ID
     * @return 步骤列表
     */
    public List<TaskStep> selectStepsByTaskId(Long taskId);

    /**
     * 根据任务ID和步骤名称查询步骤
     * 
     * @param taskId 任务ID
     * @param stepName 步骤名称
     * @return 任务步骤
     */
    public TaskStep selectStepByTaskIdAndName(Long taskId, String stepName);

    /**
     * 新增任务步骤
     * 
     * @param taskStep 任务步骤
     * @return 结果
     */
    public int insertTaskStep(TaskStep taskStep);

    /**
     * 修改任务步骤
     * 
     * @param taskStep 任务步骤
     * @return 结果
     */
    public int updateTaskStep(TaskStep taskStep);

    /**
     * 批量删除任务步骤
     * 
     * @param stepIds 需要删除的任务步骤主键集合
     * @return 结果
     */
    public int deleteTaskStepByStepIds(Long[] stepIds);

    /**
     * 删除任务步骤信息
     * 
     * @param stepId 任务步骤主键
     * @return 结果
     */
    public int deleteTaskStepByStepId(Long stepId);

    /**
     * 为任务初始化所有步骤
     * 
     * @param taskId 任务ID
     */
    public void initializeSteps(Long taskId);

    /**
     * 开始步骤
     * 
     * @param stepId 步骤ID
     */
    public void startStep(Long stepId);

    /**
     * 完成步骤
     * 
     * @param stepId 步骤ID
     * @param outputData 输出数据
     */
    public void completeStep(Long stepId, String outputData);

    /**
     * 步骤失败
     * 
     * @param stepId 步骤ID
     * @param error 错误信息
     */
    public void failStep(Long stepId, String error);

    /**
     * 更新步骤进度
     * 
     * @param stepId 步骤ID
     * @param progress 进度(0-100)
     */
    public void updateStepProgress(Long stepId, int progress);

    /**
     * 保存步骤断点数据
     * 
     * @param stepId 步骤ID
     * @param jsonPath JSON路径
     * @param value 值
     */
    public void saveStepCheckpoint(Long stepId, String jsonPath, String value);

    /**
     * 加载步骤断点数据
     * 
     * @param stepId 步骤ID
     * @return 断点数据JSON
     */
    public String loadStepCheckpoint(Long stepId);

    /**
     * 删除指定时间之前的步骤
     * 
     * @param days 天数
     * @return 删除数量
     */
    public int deleteStepsBefore(int days);

    /**
     * 根据任务ID删除所有步骤
     * 
     * @param taskId 任务ID
     * @return 删除数量
     */
    public int deleteStepsByTaskId(Long taskId);
}

